<?php

class WebCacheTools
{
    /**
     * 开始捕捉静态页面信息
     */
    function startCatch($httpRealPageUrl){
        //判断是否读写和写入缓存
        if(!self::isCache($httpRealPageUrl))return;
        ob_start(); // 打开输出缓冲区开始捕捉所有页面内容
    }
    
    /**
     * 读取缓存信息
     */
    function readWebCache ($httpRealPageUrl)
    {
        //判断是否读写
        if(!self::isCache($httpRealPageUrl))return;
        
        $cacheTime = 3600*60*24; // 设置缓存页面过期时间
        $cacheDir = SITE_PATH.'/cacheweb'; // 设置缓存页面文件目录
        if (! is_dir($cacheDir))
            mkdir($cacheDir); // 判断目录是否存在，否则创建目录
        
        //保存文件名
        $file_name  = md5($_SERVER['REQUEST_URI']);
        $cacheFile = $cacheDir . '/' . $file_name . '.html'; // 缓存文件路径，文件以日期命名
        
        if(is_file($cacheFile)){
            echo $content = file_get_contents($cacheFile); // 如果缓存文件已经存在，且未过期则读取
            exit();
        }
        
    }
    
    /**
     * 写入缓存信息
     */
    function writeWebCache($httpRealPageUrl){
        //判断是否读写
        if(!self::isCache($httpRealPageUrl))return;
        
        $cacheTime = 3600*60*24; // 设置缓存页面过期时间
        $cacheDir = SITE_PATH.'/cacheweb'; // 设置缓存页面文件目录
        if (! is_dir($cacheDir))
            mkdir($cacheDir); // 判断目录是否存在，否则创建目录
        
        //保存文件名
        $file_name  = md5($_SERVER['REQUEST_URI']);
        
        $cacheFile = $cacheDir . '/' . $file_name . '.html'; // 缓存文件路径，文件以日期命名
        if (! is_file($cacheFile) || time() - filemtime($cacheFile) > $cacheTime) {
            $content = ob_get_contents(); // 取得php页面输出的全部内容
            $fp = fopen($cacheFile, "w"); // 输出内容写入文件
            fwrite($fp, $content);
            fclose($fp);
        } 
    }
    
    /**
     * 判断该页面是否读写缓存
     */
    public static function isCache($httpRealPageUrl) {
        $isCache = false;
        $condition = array(/* "/login" */);
        for(;$v = current($condition);next($condition)){
            if($v== $httpRealPageUrl){
                $isCache = true;
                break;
            }
        }
        return $isCache;
    }
}

?>